"""
概念：
1、可以被next()函数调用并不到返回一个值的对象称为迭代器对象（Iterator)
2、迭代器不但可以作用于for循环，还可以被next（）调用

"""
from collections import Iterator
print(isinstance([],Iterator))
print(isinstance({},Iterator))
print(isinstance("sunck",Iterator))
print(isinstance((x for x in range(1,11)),Iterator))

# 转成Iterator对象
li = [1, 2, 3, 4]
# 将可迭代对象转为迭代器
li = iter(li)
print(next(li))
print(next(li))
print(next(li))
print(next(li))

# 为什么list dict str set等数据类型不是Iterator
# Iterator对象表示的时一个数据流，Iterator对象一个被next()函数调用
# 并返回一个数据，直到抛出Stop Iteration错误。可以把数据流看成是一个
# 有序的序列，但是不知道序列的长度，只能通过next()函数不断计算下一个数据，所以说
# Iterator设计是惰性求值的
# Iterator可以表示一个无限大的数据流，而list永远不可能存储无限的数据